--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / tests / backend / test_http_ws_multi_file_scanners.py
Displaying Raw • Download
tests/backend/test_http_ws_multi_file_scanners.py dev (af76f09d) Text, 2.93 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Prove HTTP/WS contract scanners see routes under backend/http and lifecycle."""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path
Tff7b72from T7ee787testsT7ee787.T7ee787backendT7ee787.T7ee787http_api_contract_helpers Tff7b72import Tb4b4b4(
Te6edf3extract_meshchat_http_routesTb4b4b4,
Te6edf3http_route_source_pathsTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787testsT7ee787.T7ee787backendT7ee787.T7ee787ws_contract_helpers Tff7b72import Te6edf3iter_ws_source_files
Te6edf3_REPO_ROOT Tff7b72= Te6edf3PathTb4b4b4(Tff7b72__file__Tb4b4b4)Tff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffparentsTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3_MESHCHAT_PY Tff7b72= Te6edf3_REPO_ROOT Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatxTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffmeshchat.pyTa5d6ff"
Te6edf3_HTTP_ROOT Tff7b72= Te6edf3_REPO_ROOT Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatxTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffsrcTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffbackendTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffhttpTa5d6ff"
Te6edf3_LIFECYCLE_ROOT Tff7b72= Te6edf3_REPO_ROOT Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatxTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffsrcTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffbackendTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6fflifecycleTa5d6ff"
Tff7b72def Td2a8fftest_http_route_source_paths_include_meshchat_and_http_packageTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3repo Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffrepoTa5d6ff"
Te6edf3meshchat Tff7b72= Te6edf3repo Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatxTa5d6ff"
Te6edf3meshchatTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3meshchat Tff7b72/ Ta5d6ff"Ta5d6ffmeshchat.pyTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff# placeholderTffea00\nTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3routes_dir Tff7b72= Te6edf3meshchat Tff7b72/ Ta5d6ff"Ta5d6ffsrcTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffbackendTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffhttpTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffroutesTa5d6ff"
Te6edf3routes_dirTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3routes_dir Tff7b72/ Ta5d6ff"Ta5d6ffstatus.pyTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(
Ta5d6ff'Ta5d6ff@routes.get(Ta5d6ff"Ta5d6ff/api/v1/statusTa5d6ff"Ta5d6ff)Tffea00\nTa5d6ffasync def status(request):Tffea00\nTa5d6ff return NoneTffea00\nTa5d6ff'Tb4b4b4,
Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3paths Tff7b72= Te6edf3http_route_source_pathsTb4b4b4(Te6edf3repoTb4b4b4)
Tff7b72assert Tb4b4b4(Te6edf3meshchat Tff7b72/ Ta5d6ff"Ta5d6ffmeshchat.pyTa5d6ff"Tb4b4b4) Tff7b72in Te6edf3paths
Tff7b72assert Tb4b4b4(Te6edf3routes_dir Tff7b72/ Ta5d6ff"Ta5d6ffstatus.pyTa5d6ff"Tb4b4b4) Tff7b72in Te6edf3paths
Tff7b72def Td2a8fftest_extract_counts_routes_only_under_backend_httpTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3repo Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffrepoTa5d6ff"
Te6edf3meshchat Tff7b72= Te6edf3repo Tff7b72/ Ta5d6ff"Ta5d6ffmeshchatxTa5d6ff"
Te6edf3meshchatTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3meshchat Tff7b72/ Ta5d6ff"Ta5d6ffmeshchat.pyTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(
Ta5d6ff"Ta5d6ff# no routes hereTffea00\nTa5d6ff"Tb4b4b4,
Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3routes_dir Tff7b72= Te6edf3meshchat Tff7b72/ Ta5d6ff"Ta5d6ffsrcTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffbackendTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffhttpTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffroutesTa5d6ff"
Te6edf3routes_dirTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3routes_dir Tff7b72/ Ta5d6ff"Ta5d6ffshell.pyTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(
Ta5d6ff'Ta5d6ff@routes.get(Ta5d6ff"Ta5d6ff/Ta5d6ff"Ta5d6ff)Tffea00\nTa5d6ff'
Ta5d6ff"Ta5d6ffasync def index(request):Tffea00\nTa5d6ff"
Ta5d6ff"Ta5d6ff return NoneTffea00\nTa5d6ff"
Ta5d6ff"Tffea00\nTa5d6ff"
Ta5d6ff'Ta5d6ff@routes.get(Ta5d6ff"Ta5d6ff/api/v1/example-only-in-httpTa5d6ff"Ta5d6ff)Tffea00\nTa5d6ff'
Ta5d6ff"Ta5d6ffasync def example(request):Tffea00\nTa5d6ff"
Ta5d6ff"Ta5d6ff return NoneTffea00\nTa5d6ff"Tb4b4b4,
Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3live Tff7b72= Te6edf3extract_meshchat_http_routesTb4b4b4(Te6edf3meshchat Tff7b72/ Ta5d6ff"Ta5d6ffmeshchat.pyTa5d6ff"Tb4b4b4)
Tff7b72assert Tb4b4b4{Ta5d6ff"Ta5d6ffmethodTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffGETTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpathTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4} Tff7b72in Te6edf3live
Tff7b72assert Tb4b4b4{Ta5d6ff"Ta5d6ffmethodTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffGETTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpathTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff/api/v1/example-only-in-httpTa5d6ff"Tb4b4b4} Tff7b72in Te6edf3live
Tff7b72def Td2a8fftest_http_route_source_paths_includes_live_backend_httpTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3files Tff7b72= Te6edf3http_route_source_pathsTb4b4b4(Te6edf3_REPO_ROOTTb4b4b4)
Tff7b72assert Te6edf3_MESHCHAT_PY Tff7b72in Te6edf3files
Tff7b72assert Tffa657anyTb4b4b4(
Te6edf3_HTTP_ROOT Tff7b72in Te6edf3pathTff7b72.Td2a8ffparents Tff7b72or Te6edf3pathTff7b72.Td2a8ffparent Tff7b72== Te6edf3_HTTP_ROOT Tff7b72for Te6edf3path Tff7b72in Te6edf3files
Tb4b4b4)
Tff7b72def Td2a8fftest_live_meshchat_routes_still_discoveredTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3live Tff7b72= Te6edf3extract_meshchat_http_routesTb4b4b4(Te6edf3_MESHCHAT_PYTb4b4b4)
Tff7b72assert Tffa657anyTb4b4b4(Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffpathTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff/api/v1/statusTa5d6ff" Tff7b72for Te6edf3r Tff7b72in Te6edf3liveTb4b4b4)
Tff7b72assert Tffa657anyTb4b4b4(Te6edf3rTb4b4b4[Ta5d6ff"Ta5d6ffpathTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff/Ta5d6ff" Tff7b72for Te6edf3r Tff7b72in Te6edf3liveTb4b4b4)
Tff7b72def Td2a8fftest_iter_ws_source_files_includes_backend_http_and_lifecycleTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3files Tff7b72= Te6edf3iter_ws_source_filesTb4b4b4(Te6edf3_REPO_ROOTTb4b4b4)
Tff7b72assert Te6edf3_MESHCHAT_PY Tff7b72in Te6edf3files
Tff7b72assert Tffa657anyTb4b4b4(Ta5d6ff"Ta5d6ffbackend/httpTa5d6ff" Tff7b72in Te6edf3pathTff7b72.Td2a8ffas_posixTb4b4b4(Tb4b4b4) Tff7b72for Te6edf3path Tff7b72in Te6edf3filesTb4b4b4)
Tff7b72if Te6edf3_LIFECYCLE_ROOTTff7b72.Td2a8ffis_dirTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Tffa657anyTb4b4b4(Ta5d6ff"Ta5d6ffbackend/lifecycleTa5d6ff" Tff7b72in Te6edf3pathTff7b72.Td2a8ffas_posixTb4b4b4(Tb4b4b4) Tff7b72for Te6edf3path Tff7b72in Te6edf3filesTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────